#!/usr/bin env python
# -*- coding: utf-8 -*-
###########################################################################
#   Copyright (C) 2008 by Serj Poltavsky                                  #
#   serge.uliss at gmail.com                                              #
#                                                                         #
#   This program is free software; you can redistribute it and/or modify  #
#   it under the terms of the GNU General Public License as published by  #
#   the Free Software Foundation; either version 3 of the License, or     #
#   (at your option) any later version.                                   #
#                                                                         #
#   This program is distributed in the hope that it will be useful,       #
#   but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#   GNU General Public License for more details.                          #
#                                                                         #
#   You should have received a copy of the GNU General Public License     #
#   along with this program. If not, see <http://www.gnu.org/licenses/>   #
###########################################################################

import os
import sys
import time
import subprocess
from convert import Convert, ConvertError

class VideoFrame(Convert):
    def __init__(self, src, dest, time_pos, format='jpg'):
        Convert.__init__(self, src, dest)
        self.time_pos = int(time_pos)

    def convert(self):
        self.check_src()

        cmd = ['ffmpeg', '-i', self.src, '-an', '-r', '1',
            '-y', '-vframes', '1', '-ss', self.str_time(),
            self.dest
        ]

        if __debug__:
            print >>sys.stderr, "Extracting video frame at %s sec" % self.time_pos
            print >>sys.stderr, " ".join(cmd)

        ret = subprocess.call(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        if ret != 0:
            raise ConvertError("Error while extracting frame from \"%s\"" % self.src)

    def str_time(self):
        return time.strftime("%H:%M:%S", time.gmtime(self.time_pos))